How it's wired GanglioR
← the -Dex suite · contributor on-ramp

🗺️Architecture

The whole system on one page — not twenty briefs. The reflex arc, the three-layer stack, the file pattern every node repeats, the two gates, and where things live. Start here, then open CONTRIBUTING.md.

Shape
Reflex arcreceptors → relay → integration
Layers
CORE · DSP · UIdependencies point downhill
Runtime
100% localno network · no CDN · file://
Guardrails
Two gatesbehavior + provenance
01 — THE SHAPE

One nervous system, read end-to-end

The suite is an autonomic-nervous-system analogue. Each -Dex node is an afferent receptor sensing exactly one signal; Ganglior is the relay bus where exports converge; the Integrator is central integration; the read-out is the insight. Same arc a knee-jerk follows.

01

Sense

Seven single-signal receptors. Each transduces one thing well, overnight.

the -Dex nodes →
02

Relay

Node exports converge as events on one shared bus, lined up by the clock.

Ganglior · the bus
03

Integrate

Afferent signals become one coherent, longitudinal percept.

the Integrator →
04

Insight

One daily read-out — what the autonomic system is doing, in plain words.

ANS Intelligence
🧩
Nodes never import each other. A user may own only one device, so every node is standalone. Cross-signal work happens only through the ganglior.node-export contract, consumed by the Integrator — never by reaching into another node's functions.
02 — THE STACK

Three layers, one job each

Every file belongs to exactly one layer. Dependencies point downhill only — UI → DSP → CORE — with no cycles. The settling question for any line of code: would deleting it change a number, or only its appearance?

UIper nodeno signal logic

Rendering and input only. Layout, charts, the evidence-badge spans, the depth selector, file ingest, exports, and view-state persistence. It asks DSP for the number and the registry for how to show it — it never recomputes one.

<node>-render.js<node>-app.js<Node>.src.html
▲ calls  ·  depends downhill
DSPper nodeno UI · no DOM · no localStorage

One node's signal math: parsing, feature extraction, every metric. The domain expertise — complex, but only about its one signal. Runs headless in Node (the test suite essentially does). parseTimestamp is duplicated here per the Clock Contract, by design.

<node>-dsp.js-morph.js-edf.js-profile.js-cross.js
▲ uses  ·  the Integrator also consumes exports, never internals
COREsharedzero device knowledge · depends on nothing

The constitution every node obeys — stable by default, extended by adding new surface, never mutating old. No "oxygen" or "glucose" knowledge ever lives here. New CORE capability is a new field/method, not a changed one.

kernel-constants.jsmetric-registry.jscrossnight-envelope.jsganglior-provenance.js
03 — THE PATTERN EVERY NODE REPEATS

Learn one node, you know them all

A <Node>.src.html references external *.js in dependency order, then bundles to a standalone <Node>.html. The load order is the downhill direction: CORE first, then DSP, then UI.

<Node>.src.html — loads in this order, bundles → <Node>.html
CORE (shared) ganglior-provenance · kernel-constants · metric-registry · crossnight-envelope
CORE (node) <node>-registry.js — this node's metric DATA (label·unit·depth·evidence·cite)
DSP <node>-dsp.js (+ -morph / -edf / -profile) — pure signal math
UI <node>-render.js — charts, tables, badges
UI <node>-app.js — ingest · pipeline · exports (loaded last)
FUSION <node>-cross.js / -fusion.js — multi-night + Ganglior export

emits ganglior.node-export → the Integrator fuses across nodes
🔎
Want the real file list, data flow and limits for a specific node? Each has its own wiring guide — start at the index.
04 — THE GUARDRAILS

Two gates make the contracts real

Durability comes from enforced contracts, not tidy code. Run both after any change — a red is a blocker, not a nitpick. The shared assertions in tests/dex-tests.js are the public contract; keep back-compat rather than editing an assertion to hide a break.

Dex-Test-Suite.htmlbehavior

Loads the real modules + shared assertions and drives a live app bundle. Open it, wait ~3 s, the #summary pill must be all-green. CI mirror: node tests/run-tests.mjs. Run after any DSP/app/cross change and after re-bundling.

verify-provenance.htmlprovenance

Recomputes each bundle's buildHash and audits committed exports against it. Run after re-bundling — confirm no red mismatches. (A re-bundle changes the hash by design.)

Edit inputs, not bundlesbuild rule

Change *.js + <Node>.src.html, never the bundled <Node>.html, then re-bundle via the inliner. 100% local, system fonts only, no CDN.

Clock Contractnon-negotiable

Floating tMs = Date.UTC(...), read back with getUTC*. Parse vendor stamps by regex, never new Date(str). A missing stamp is null, never now().

05 — WHERE THINGS LIVE

The repo map

Not every file — the landmarks. The rest are deep-dive briefs you open only when a task sends you there.

<Node>.htmlThe shipped instrument — a frozen, hash-verifiable single file. Generated; don't hand-edit.
<Node>.src.html · <node>-*.jsThe editable source for each node (DSP / render / app / registry / …). This is what you change.
kernel-constants · metric-registry · crossnight-envelope · ganglior-provenanceThe shared CORE every node loads — thresholds, badge logic, envelope shape, provenance stamp.
Integrator.* · integrator-*.jsThe fusion layer — consumes node exports, fuses same-night + longitudinal.
Dex-Test-Suite.html · verify-provenance.html · tests/The two gates + the shared assertions (the public contract).
synth-gen.* · cohort-*.js · cohort-*.htmlSynthGen + the validation harness — synthetic corpus and the real-DSP experiments.
*-analysis.html · papers/The analysis tools and the working-preprint series each tool feeds.
CLAUDE.md · ARCHITECTURE-PRINCIPLES.md · LEXICON.mdThe constitution, the why, and the naming system. Read before the briefs.
*-BRIEF.md · *-README.mdDeep dives. Open the one a task points you to — not the on-ramp.
🚦
The on-ramp is three files, not thirty: this page, CONTRIBUTING.md, and the wiring index. Everything else is reference you reach for on demand.
Start contributing →
CONTRIBUTING.md
Per-node wiring →
The wiring index